home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1992 / 10 / 02 / ftxt-format / ftxt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-01  |  3.5 KB  |  182 lines

  1. /*
  2.  * Bitte vom Cli starten.
  3.  */
  4. #include <exec/types.h>
  5. #include <exec/memory.h>
  6. #include <libraries/dos.h>
  7. #include <stdio.h>
  8. #include <fcntl.h>
  9.  
  10. FILE *DateiOut=NULL;
  11. FILE *DateiIn=NULL;
  12.  
  13. char EingabeDatei[80];
  14. char AusgabeDatei[80];
  15.  
  16. /*
  17.  * Struktur für den IFF-Header
  18.  */
  19. struct FTXT {
  20.   char Form[4];
  21.   long Size;
  22.   char ID[4];
  23. };
  24.  
  25. struct FTXT ftxt;
  26.  
  27. /*
  28.  * Struktur für den CHRS-Chunk
  29.  */
  30. struct CHRS {
  31.   char ID[4];
  32.   long size;
  33. };
  34.  
  35. struct CHRS chrs;
  36.  
  37. /*
  38.  * Schreibt eine Textzeile in die Datei
  39.  */
  40. BOOL WriteMyText(char *string) {
  41.   long writesize,length=strlen(string);
  42.  
  43.   strcpy(chrs.ID,"CHRS");
  44.   chrs.size=length;
  45.  
  46.   writesize=fwrite((char *)&chrs,1,sizeof(struct CHRS),DateiOut);
  47.   if( writesize == sizeof(struct CHRS) ) {
  48.     writesize=fwrite(&string[0],1,length,DateiOut);
  49.     if( writesize == length ) {
  50.       if( length/2*2 != length ) {
  51.         /*
  52.          * Ungerade Anzahl Zeichen, also ein
  53.          * PAD-Byte einfügen
  54.          */
  55.         writesize=fwrite(&string[0],1,1,DateiOut);
  56.         if( writesize==1 )
  57.           return TRUE;
  58.         else {
  59.           printf("Der Text konnte nicht geschrieben werden\n");
  60.           return FALSE;
  61.         }
  62.       } else return TRUE;
  63.     } else {
  64.       printf("Der Text konnte nicht geschrieben werden\n");
  65.       return FALSE;
  66.     }
  67.   } else {
  68.     printf("Der Text konnte nicht geschrieben werden\n");
  69.     return FALSE;
  70.   }
  71. }
  72.  
  73. /*
  74.  * Erzeugt den Dateikopf. Diese Prozedur wird zweimal
  75.  * aufgerufen. Einmal zu Beginn, ein zweitesmal am Schluß,
  76.  * um die Dateigreöße einzutragen.
  77.  */
  78. BOOL WriteFTXTHeader() {
  79.   long writesize;
  80.  
  81.   /*
  82.    * An den Dateianfang
  83.    */
  84.   fseek(DateiOut,0,0);
  85.  
  86.   strcpy(ftxt.Form,"FORM");
  87.   strcpy(ftxt.ID,"FTXT");
  88.   writesize=fwrite((char *)&ftxt,1,sizeof(struct FTXT),DateiOut);
  89.   if( writesize == sizeof(struct FTXT) )
  90.     return TRUE;
  91.   else {
  92.     printf("Der Header konnte nicht geschrieben werden\n");
  93.     return FALSE;
  94.   }
  95. }
  96.  
  97. /*
  98.  * Öffnet die Eingabedatei
  99.  */
  100. FILE *MyOpenToRead(char *datei) {
  101.   FILE *new=fopen(datei,"rb");
  102.  
  103.   if( new==NULL )
  104.     printf("Die Datei %s konnte nicht geöffnet werden\n",datei);
  105.  
  106.   return new;
  107. }
  108.  
  109. /*
  110.  * Erzeugt die neue Datei
  111.  */
  112. FILE *MyOpenToWrite(char *datei) {
  113.   FILE *new=fopen(datei,"wb");
  114.  
  115.   if( new==NULL )
  116.     printf("Die Datei %s konnte nicht erstellt werden\n",datei);
  117.  
  118.   return new;
  119. }
  120.  
  121. char Eingabebuffer[256];
  122.  
  123. /*
  124.  * Hier wird die ASCII-Datei Zeile für Zeile gelesen
  125.  * und in ein FTXT-Format konvertiert
  126.  */
  127. BOOL GenerateFTXT() {
  128.   char *string;
  129.  
  130.   while( 1 ) {
  131.     string=fgets(&Eingabebuffer[0],256,DateiIn);
  132.     if( string!=NULL ) {
  133.       if( WriteMyText(&Eingabebuffer[0]) == FALSE )
  134.         return FALSE;
  135.     } else return TRUE;
  136.   }
  137. }
  138.  
  139. /*
  140.  * Bitte vom CLI/Shell starten
  141.  */
  142. main(long argc, char **argv) {
  143.   long size;
  144.  
  145.   if( argc ) {
  146.     printf("Name der den Text beinhalteten Datei?\n");
  147.     gets(EingabeDatei);
  148.     DateiIn=MyOpenToRead(EingabeDatei);
  149.     if( DateiIn ) {
  150.       printf("Name der zu erstellenden FTXT-Textdatei?\n");
  151.       gets(AusgabeDatei);
  152.       DateiOut=MyOpenToWrite(AusgabeDatei);
  153.       if( DateiOut ) {
  154.  
  155.         /*
  156.          * Den IFF-Header schreiben
  157.          */
  158.         if( WriteFTXTHeader() ) {
  159.           if( GenerateFTXT() ) {
  160.             /*
  161.              * Größe der Datei ermitteln
  162.              */
  163.             size=ftell(DateiOut);
  164.  
  165.             /*
  166.              * Eintragen der Größe in den Header abzüglich
  167.              * den ersten 8 Byte
  168.              */
  169.             ftxt.Size=size-8;
  170.  
  171.             (void) WriteFTXTHeader();
  172.           }
  173.         }
  174.  
  175.         fclose( DateiOut );
  176.       }
  177.       fclose( DateiIn );
  178.     }
  179.   }
  180. }
  181.  
  182.